﻿using ASPApiDemo.Model;
using Newtonsoft.Json;

namespace ASPApiDemo.Repository
{
    //仓储控制数据库连接db，只负责数据的增删改查，业务逻辑在服务中实现
    public class BaseRepository<TEntity> : IBaseRepository<TEntity> where TEntity : class, new()
    {
        //模拟从数据库中异步查询到的数据
        public async Task<List<TEntity>> Query()
        {
            // Task.CompletedTask是一个已经完成的、无返回值的任务（相当于 void）
            // await它不会阻塞线程，但会立即继续执行后续代码（因为任务已经是完成状态）
            // 主要用于满足异步方法签名要求但无需真正异步操作的场景。
            await Task.CompletedTask;
            // 模拟从数据库中查询到的数据
            // 其实数据库查询也是支持泛型的
            var data = "[{\"Id\":1,\"Name\":\"Jack-Generic\"},{\"Id\":2,\"Name\":\"Tom-Generic\"}]";
            return JsonConvert.DeserializeObject<List<TEntity>>(data) ?? new List<TEntity>();
        }
    }
}
